package ejemplojdbc;
import java.sql.*;
import java.util.*;
import java.io.*;

public class liga {
    static Scanner k = new Scanner(System.in);
    
    public static void main(String[] args) throws ClassNotFoundException{
        conexionMySQL();
        System.out.println("...");
    }
    
    public static void conexionMySQL() throws ClassNotFoundException{
        Connection con = null;
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost/ligafutbol","root","");
            System.out.println("Connexion correcta");
            //crearTablaEq(con);    crearTablaJug(con);     insertarEq(con);      insertarJu(con);
            //verEq(con);           verJu(con);             verJuEq(con);         updateJu(con);
            almProc(con);
            con.close();
        } catch (SQLException ex) {
            System.out.println("Error en la conexion " + ex.getMessage());
        }
    }
    
    public static void crearTablaEq(Connection con){
        Statement stmt = null;
         String query = "CREATE TABLE Equipo(id_equipo INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), estadio VARCHAR(50), poblacion VARCHAR(50), codigo_postal CHAR(5));";
        try {
            stmt = con.createStatement();
            stmt.executeUpdate(query);
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void crearTablaJug(Connection con){
        Statement stmt = null;
         String query = "CREATE TABLE Jugador(id_jugador INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), dorsal INT, edad INT, equipo INT, FOREIGN KEY (equipo) REFERENCES Equipo(id_equipo));";
        try {
            stmt = con.createStatement();
            stmt.executeUpdate(query);
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void insertarEq(Connection con){
        System.out.println("Insertar Nuevo Equipo");
        System.out.println("***************************************");
        System.out.println("Nombre");
        String nom = k.nextLine();
        System.out.println("Estadio");
        String es = k.nextLine();
        System.out.println("Población");
        String pob = k.nextLine();
        System.out.println("Codigo Postal");
        String cp = k.nextLine();
        Statement stmt = null;    
        String query = "INSERT INTO Equipo(nombre, estadio, poblacion, codigo_postal) VALUES('" + nom + "', '" + es + "', '" + pob + "', '" + cp + "');";
        try {
            stmt = con.createStatement();
            stmt.executeUpdate(query);
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void insertarJu(Connection con){
        System.out.println("Insertar Nuevo Jugador");
        System.out.println("***************************************");
        System.out.println("Nombre");
        String nom = k.nextLine();
        System.out.println("Dorsal");
        int dor = k.nextInt();
        System.out.println("Edad");
        int e = k.nextInt();
        System.out.println("Equipo");
        int eq = k.nextInt();
        Statement stmt = null;    
        String query = "INSERT INTO Jugador(nombre, dorsal, edad, equipo) VALUES('" + nom + "', " + dor + ", " + e + ", " + eq + ");";
        try {
            stmt = con.createStatement();
            stmt.executeUpdate(query);
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void verEq(Connection con){
        Statement stmt = null;
        String query = "SELECT * FROM Equipo;";
        try{
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while(rs.next()){
                int id = rs.getInt("id_equipo");
                String nom = rs.getString("nombre");
                String es = rs.getString("estadio");
                String pob = rs.getString("poblacion");
                String cp = rs.getString("codigo_postal");
                
                System.out.println("Identificador " + id);
                System.out.println("Nombre " + nom);
                System.out.println("Estadio " + es);
                System.out.println("Poblacion " + pob);
                System.out.println("Codigo postal " + cp);
                System.out.println("***************************************");
            }
            
            stmt.close();
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void verJu(Connection con){
        Statement stmt = null;
        String query = "SELECT * FROM Jugador;";
        try{
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while(rs.next()){
                int id = rs.getInt("id_jugador");
                String nom = rs.getString("nombre");
                String d = rs.getString("dorsal");
                String e = rs.getString("edad");
                String eq = rs.getString("equipo");
                
                System.out.println("Identificador " + id);
                System.out.println("Nombre " + nom);
                System.out.println("Dorsal " + d);
                System.out.println("Edad " + e);
                System.out.println("Equipo " + eq);
                System.out.println("***************************************");
            }
            
            stmt.close();
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void verJuEq(Connection con){
        System.out.println("Nombre del Equipo a buscar");
        String nomEq = k.nextLine();
        System.out.println("***************************************");
        
        Statement stmt = null;
        String query = "SELECT j.nombre, j.dorsal, j.edad, e.nombre FROM Jugador j, Equipo e WHERE j.equipo = e.id_equipo AND e.nombre = '" + nomEq + "';";
        try{
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while(rs.next()){
                String nom = rs.getString("j.nombre");
                int d = rs.getInt("j.dorsal");
                int e = rs.getInt("j.edad");
                String nomq = rs.getString("e.nombre");
                
                System.out.println("Nombre " + nom);
                System.out.println("Dorsal " + d);
                System.out.println("Edad " + e);
                System.out.println("Equipo " + nomq);
                System.out.println("***************************************");
            }
            
            stmt.close();
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        } 
    }
    
    public static void updateJu(Connection con){
        PreparedStatement stmt = null;
        System.out.println("Identificador del jugador a actualizar");
        int id = k.nextInt();
        System.out.println("Edad a actualizar");
        int e = k.nextInt();
        System.out.println("***************************************");
        String query = "UPDATE Jugador SET edad = ? WHERE id_jugador = " + id;
        try{
            stmt = con.prepareStatement(query);
            stmt.setInt(1, e);
            stmt.executeUpdate();
            System.out.println("Edad actualizada");
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void deleteJu(Connection con){
        PreparedStatement stmt = null;
        System.out.println("Nombre del equipo");
        int nom = k.nextInt();
        String query = "DELETE FROM Jugador WHERE equipo = (SELECT id_equipo FROM Equipo WHERE nombre = ?)";
        try{
            stmt = con.prepareStatement(query);
            stmt.setInt(1, nom);
            stmt.executeUpdate();
            System.out.println("Jugadores eliminados");
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void almProc(Connection con){
        try{
            CallableStatement cs = con.prepareCall("{call cuantosJugadores}");
            cs.execute();
            ResultSet rs = cs.getResultSet();
            while(rs.next()){
                System.out.println("El numero de jugadores es: " + rs.getInt(1));
            }
        }catch(SQLException ex){
            System.out.println("Error SQL " + ex.getMessage());
        }
    }
    
    public static void fich(Connection con){
        File f1 = new File("jugadores.txt");
        File f2 = new File("equipos.txt");
        DataOutputStream out = null;
        try{
            out = new DataOutputStream(new FileOutputStream(f1));
            
            out.close();
            
            out = new DataOutputStream(new FileOutputStream(f2));
            
            out.close();
        }catch(FileNotFoundException ex){
            System.out.println("archivo no encontrado");
        }catch(IOException ex){
            System.out.println("Error en  la escritura " + ex.getMessage());
        }
    }
}